﻿Imports PTIC_Util
Imports PTIC_Util.GestionCalculs

Namespace Comptes

    ''' <summary>
    ''' Représente la Trésorerie
    ''' </summary>
    ''' <remarks></remarks>
    Public Class CompteTresorerie_V2
        Inherits CalculCompose

        Private _parametresEntree As Parametres

        ''' <summary>
        ''' Données initiales utilisées pour faire les calculs
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property ParametresEntree() As Parametres
            Get
                Return _parametresEntree
            End Get
            Friend Set(ByVal value As Parametres)
                _parametresEntree = value
            End Set
        End Property

        ''' <summary>
        ''' Résultats des calculs
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Overloads ReadOnly Property Resultats() As ResultatsCompteTresorerie
            Get
                Return _resultats
            End Get
        End Property


        ''' <summary>
        ''' 
        ''' </summary>
        ''' <remarks></remarks>
        Public Sub New()
            MyBase.New()
            _resultats = New ResultatsCompteTresorerie
        End Sub

        ''' <summary>
        ''' Parametre utilisé pour évaluer les comptes de trésorerie
        ''' </summary>
        ''' <remarks></remarks>
        Public Class Parametres

            ''' <summary>
            ''' Représente le nombre d'années de projection
            ''' </summary>
            ''' <remarks></remarks>
            Public Property NbAnneesProjetees As Integer

            ''' <summary>
            ''' Représente la variation du capital social
            ''' </summary>
            ''' <remarks></remarks>
            Public Property VariationCapiSocial As Double()

            ''' <summary>
            ''' Représente le résultat distribué
            ''' </summary>
            ''' <remarks></remarks>
            Public Property ResultatDistribue As Double()
        End Class

        ''' <summary>
        ''' Résultat de lévaluation de la trésorerie
        ''' </summary>
        ''' <remarks></remarks>
        Public Class ResultatsCompteTresorerie

            ''' <summary>
            ''' Représente la variation du capital social
            ''' </summary>
            ''' <remarks></remarks>
            Public Property VariationCapiSocial As Double()

            ''' <summary>
            ''' Représente le résultat distribué
            ''' </summary>
            ''' <remarks></remarks>
            Public Property ResultatDistribue As Double()


            ''' <summary>
            ''' Représente le flux avec les actionnaires
            ''' </summary>
            ''' <remarks></remarks>
            Public Property FluxActionnaire As Double()

            ''' <summary>
            ''' Fait une copie des données
            ''' </summary>
            ''' <returns></returns>
            ''' <remarks></remarks>
            Public Function Copy() As ResultatsCompteTresorerie
                Dim result As New ResultatsCompteTresorerie
                Dim variationCapiSocial_copy(VariationCapiSocial.Count - 1) As Double
                Dim resultatDistribue_copy(ResultatDistribue.Count - 1) As Double
                Dim fluxActionnaire_copy(FluxActionnaire.Count - 1) As Double
                For i = 0 To VariationCapiSocial.Count - 1
                    variationCapiSocial_copy(i) = VariationCapiSocial(i)
                    resultatDistribue_copy(i) = ResultatDistribue(i)
                    fluxActionnaire_copy(i) = FluxActionnaire(i)
                Next
                result.VariationCapiSocial = variationCapiSocial_copy
                result.ResultatDistribue = resultatDistribue_copy
                result.FluxActionnaire = fluxActionnaire_copy
                Return result
            End Function
        End Class

        ''' <summary>
        ''' 
        ''' </summary>
        ''' <remarks></remarks>
        Protected Overrides Sub procedureCalcul()
            Dim resultatsCalcul As New ResultatsCompteTresorerie
            With _parametresEntree
                ReDim resultatsCalcul.FluxActionnaire(.NbAnneesProjetees - 1)
                ReDim resultatsCalcul.VariationCapiSocial(.NbAnneesProjetees - 1)
                ReDim resultatsCalcul.ResultatDistribue(.NbAnneesProjetees - 1)
                For i = 1 To .NbAnneesProjetees
                    resultatsCalcul.FluxActionnaire(i - 1) = -.VariationCapiSocial(i - 1) + .ResultatDistribue(i - 1)
                    resultatsCalcul.VariationCapiSocial(i - 1) = .VariationCapiSocial(i - 1)
                    resultatsCalcul.ResultatDistribue(i - 1) = .ResultatDistribue(i - 1)
                Next
            End With
            _resultats = resultatsCalcul
        End Sub
    End Class

End Namespace